package io.github.echarts.model.coordinate;

import io.github.echarts.model.geometry.Dimension;
import io.github.echarts.model.geometry.Rectangle;

/**
 * 坐标系接口
 * 所有坐标系的基础接口，定义了坐标转换和数据映射的能力
 */
public interface CoordinateSystem {
    /**
     * 获取坐标系唯一标识符
     * 
     * @return 坐标系ID
     */
    String getId();
    
    /**
     * 获取坐标系类型
     * 
     * @return 坐标系类型
     */
    CoordinateSystemType getType();
    
    /**
     * 获取坐标系维度
     * 
     * @return 坐标系维度
     */
    Dimension getDimension();
    
    /**
     * 初始化坐标系
     * 该方法执行坐标系所需的初始化逻辑
     */
    void initialize();
    
    /**
     * 获取坐标系布局区域
     * 
     * @return 坐标系布局区域
     */
    Rectangle getLayoutArea();
    
    /**
     * 设置坐标系布局区域
     * 
     * @param area 坐标系布局区域
     */
    void setLayoutArea(Rectangle area);
    
    /**
     * 将数据值转换为坐标
     * 
     * @param value 数据值
     * @param axisIndex 轴索引（0表示x轴或类似，1表示y轴或类似）
     * @return 坐标值
     */
    double dataToCoord(double value, int axisIndex);
    
    /**
     * 将坐标转换为数据值
     * 
     * @param coord 坐标值
     * @param axisIndex 轴索引（0表示x轴或类似，1表示y轴或类似）
     * @return 数据值
     */
    double coordToData(double coord, int axisIndex);
    
    /**
     * 应用数据范围到坐标系
     * 各具体坐标系负责实现如何处理数据范围
     * 
     * @param range 数据范围
     */
    void applyDataRange(DataRange range);
} 